<?php
class Categoria extends UDEntity {
	
	protected $cod_categoria_auto;
	protected $cod_empresa_auto;
	//protected $cod_categoria;
	protected $desc_categoria;

	public function __construct($id = ''){
		parent::__construct();

		$this->cod_categoria_auto 	= '';
		$this->cod_empresa_auto 	= '';
		$this->desc_categoria 		= '';

		if(!empty($id)){
			$this->carregar($id);
		}
	}

	//
	// Métodos próprios
	//
	public function hasID(){
		return !empty($this->cod_categoria_auto) && $this->cod_categoria_auto > 0;
	}

	public function getItems($somente_disponiveis = false, $somente_com_tamanho = false){
		$items = array();

		if($somente_com_tamanho){
			$this->CI->db->join('tamanho_item', 'tamanho_item.cod_item_auto = item.cod_item_auto');			
		}

		$this->CI->db->where('cod_empresa_auto', $this->getCodEmpresa());
		$this->CI->db->where('cod_categoria_auto', $this->getCodCategoria());

		if($somente_disponiveis){
			$this->CI->db->where('item_indisponivel', 0);
		}

		$this->CI->db->order_by('item_indisponivel', 'asc');
		$this->CI->db->order_by('desc_item', 'asc');
		
		if($somente_com_tamanho){
			$this->CI->db->distinct();
			$this->CI->db->select('item.*');
		}

		$query = $this->CI->db->get('item');
		
		if ($query && $query->num_rows() > 0){
			foreach($query->result() as $item){
				$items[] = new Item($item->cod_item_auto);
			}
		}
		
		return $items;
	}

	//
	// Implementação métodos abstratos
	//

	public function carregar($id){
		$this->CI->db->where('cod_categoria_auto', $id);
		$query = $this->CI->db->get('categoria');

		if($query && $query->num_rows() == 1){
			foreach ($query->result() as $cat) {
				$this->cod_categoria_auto 	= $cat->cod_categoria_auto;
				$this->cod_empresa_auto 	= $cat->cod_empresa_auto;
				$this->desc_categoria 		= $cat->desc_categoria;
			}
		}
	}

	public function gravar(){
		$validacao = $this->validar();
		
		if ($validacao[0]){
			if($this->hasID()){
				//Update
				$data = array(
					'desc_categoria' => $this->getDescCategoria()
					);

				$this->CI->db->where('cod_categoria_auto', $this->cod_categoria_auto);
				$this->CI->db->update('categoria', $data);
			}else{
				//Insert
				$data = array(
					'cod_empresa_auto' => $this->getCodEmpresa(),
					'desc_categoria' => $this->getDescCategoria()
					);

				$query = $this->CI->db->insert('categoria', $data);
				$this->cod_categoria_auto = $this->CI->db->insert_id();
			}
		}

		return $validacao;
	}

	public function validar(){
		$validacao = array(true,'');

		if($this->hasID()){
			//update
			if(empty($this->desc_categoria)){
				$validacao = array(false, 'Informe a descrição da categoria.');
			}else{
				$this->CI->db->from('categoria');
				$this->CI->db->where('desc_categoria', $this->getDescCategoria());
				$this->CI->db->where('cod_empresa_auto', $this->getCodEmpresa());
				$this->CI->db->where('cod_categoria_auto !=', $this->cod_categoria_auto);

				if($this->CI->db->count_all_results() > 0){
					$validacao = array(false, 'Categoria ' . $this->getDescCategoria() . ' já cadastrada.');
				}	
			}
		}else{
			//insert
			if(empty($this->desc_categoria)){
				$validacao = array(false, 'Informe a descrição da categoria.');
			}else{
				$this->CI->db->from('categoria');
				$this->CI->db->where('desc_categoria', $this->getDescCategoria());
				$this->CI->db->where('cod_empresa_auto', $this->getCodEmpresa());

				if($this->CI->db->count_all_results() > 0){
					$validacao = array(false, 'Categoria ' . $this->getDescCategoria() . ' já cadastrada.');
				}	
			}
		}

		return $validacao;
	}	


	//
	// Getters e Setters
	//

	public function getCodCategoria(){
		return $this->cod_categoria_auto;
	}
	
	public function setCodEmpresa($codEmpresa){
		$this->cod_empresa_auto = $codEmpresa;
	}

	public function getCodEmpresa(){
		return $this->cod_empresa_auto;
	}

	public function setDescCategoria($descCategoria){
		$this->desc_categoria = $descCategoria;
	}

	public function getDescCategoria(){
		return $this->desc_categoria;
	}

	public function getCategorias()
	{
		$query = $this->db->get('categoria');
		$categorias =  array();
		if ($query && $query->num_rows() > 0){
			foreach ($query->result() as $value) {
				$categorias[] = array(
					'cod_categoria_auto' => $value->cod_categoria_auto,
					'desc_categoria' => $value->desc_categoria
					);				
			}
		}

		return $categorias;
	}
}